package cn.e4j.modular.api.service;

import cn.e4j.core.dto.impl.Dto;
import cn.e4j.modular.api.mapper.Gwat161Mapper;
import cn.e4j.modular.api.mapper.Gwat300Mapper;
import cn.e4j.modular.crm.entity.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

@Service
public class Gwat300Service{

    @Autowired
    Gwat300Mapper gwat300Mapper;

    @Autowired
    Gwat161Mapper gwat161Mapper;
    /**
     * 获取转单列表 业务人员
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwco1Data(Page page,Dto inDto) {
        List<Dto> p = new ArrayList<>();
//        if (inDto.getString("status").equals("1")) { //查询未转单
//            inDto.put("gwcmacti", "Y");
//        } else if (inDto.getString("status").equals("2")) { //查询已转单
//            inDto.put("gwcmacti", "Z");
//        }

        p = gwat300Mapper.getGwco1Page(page,inDto);
        for (Dto o : p) {
            inDto.put("GWCODOCNO", o.getString("GWCODOCNO"));
            o.put("details", gwat300Mapper.getGwco1List(inDto));
        }
        return p;
    }

    /**
     * 获取转单列表 经销商
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwco2Data(Page page,Dto inDto) {
        List<Dto> p = gwat300Mapper.getGwco2Page(page,inDto);
        for (Dto o : p) {
            inDto.put("GWCODOCNO", o.getString("GWCODOCNO"));
            o.put("details", gwat300Mapper.getGwco1List(inDto));
        }
        return p;
    }

    /**
     * 转单列表--单个商品保存
     */
    @Transactional
    public void updateGwco(List<GwcoT> gwco_tPOs) {
        for (GwcoT gwco_tPO : gwco_tPOs) {
            //WHERE  gwcoent = #{gwcoent} AND gwcodocno = #{GWCODOCNO} AND gwcoseq = #{gwcoseq}
            UpdateWrapper<GwcoT> wrapper = new UpdateWrapper<>();
            wrapper.eq("GWCOENT",gwco_tPO.getGWCOENT());
            wrapper.eq("GWCODOCNO",gwco_tPO.getGWCODOCNO());
            wrapper.eq("GWCOSEQ",gwco_tPO.getGWCOSEQ());

            gwco_tPO.update(wrapper);
        }
    }

    /**
     * 获取当前用户是业务人员还是经销商
     *
     * @param inDto
     * @return
     */
    public Dto getGwaa(Dto inDto) {
        return gwat300Mapper.getGwaa(inDto);
    }

    /**
     * 获取转单权限
     *
     * @param inDto
     * @return
     */
    public Dto getUserRole1(Dto inDto) {
        return gwat300Mapper.getUserRole1(inDto);
    }

    /**
     * 更新状态
     *
     * @return
     */
    @Transactional
    public Dto update(Dto inDto) {
        Dto outDto = new Dto();
        UpdateWrapper<GwcoT> wrapper = new UpdateWrapper<>();
        wrapper.eq("GWCOENT",inDto.getString("GWCOENT"));
        wrapper.eq("GWCODOCNO",inDto.getString("GWCODOCNO"));
        wrapper.eq("GWCOSEQ",inDto.getString("GWCOSEQ"));

        GwcoT gwcoT = new GwcoT();
        gwcoT.setGWCOACTI(inDto.getString("GWCOACTI"));
        gwcoT.update(wrapper);
        outDto.setAppCode(200);
        return outDto;
    }

    /**
     * 购物车--新增
     */
    @Transactional
    public void saveData(List<GwcqT> gwcq_tPOs, List<GwcoT> gwco_tPOs) {
        for (GwcqT gwcq_tPO : gwcq_tPOs) {
            gwcq_tPO.insert();
        }

        // 转单--修改派单状态
        for (GwcoT gwco_tPO : gwco_tPOs) {
            UpdateWrapper<GwcoT> wrapper = new UpdateWrapper<>();
            wrapper.eq("GWCO001",gwco_tPO.getGWCO001());
            wrapper.eq("GWCOENT",gwco_tPO.getGWCOENT());
            gwco_tPO.update(wrapper);
        }
    }
//
    /**
     * 获取默认信息
     *
     * @param inDto
     * @return
     */
    public List<Dto> getinfo(Dto inDto) {
        return gwat300Mapper.getinfo(inDto);
    }
//
    /**
     * 获取购物车信息
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwcqData(Page<Object>page,Dto inDto) {
        return gwat300Mapper.getGwcqPage(page,inDto);
    }
//
    /**
     * 更新购物车信息
     *
     * @return
     */
    @Transactional
    public void updateGwcq(List<GwcqT> gwcq_tPOs) {
        for (GwcqT gwcq_tPO : gwcq_tPOs) {
            UpdateWrapper<GwcqT> wrapper = new UpdateWrapper<>();
            wrapper.eq("GWCQDOCNO",gwcq_tPO.getGWCQDOCNO());
            wrapper.eq("GWCQENT",gwcq_tPO.getGWCQENT());
            wrapper.eq("GWCQSEQ",gwcq_tPO.getGWCQSEQ());

            gwcq_tPO.update(wrapper);
        }
    }

    /**
     * 判断该笔购物车信息是否已经新增到gwcs_t
     *
     * @param inDto
     * @return
     */
    public Dto getCount(Dto inDto) {
        return gwat300Mapper.getCount(inDto);
    }

    /**
     * 购物车下单提交
     */
    @Transactional
    public void insert(List<GwcsT> gwcs_tPOs, List<GwcqT> gwcq_tPOS) {
        for (GwcsT gwcs_tPO : gwcs_tPOs) {
            gwcs_tPO.insert();
        }
        for (GwcqT gwcq_tPO : gwcq_tPOS) {
            UpdateWrapper<GwcqT> wrapper = new UpdateWrapper<>();
            wrapper.eq("GWCQENT",gwcq_tPO.getGWCQENT());
            wrapper.eq("GWCQDOCNO",gwcq_tPO.getGWCQDOCNO());
            wrapper.eq("GWCQSEQ",gwcq_tPO.getGWCQSEQ());
            gwcq_tPO.update(wrapper);
        }
    }
//
    /**
     * 获取客户信息 业务人员
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwak1Page(Page page,Dto inDto) {
        return gwat300Mapper.getGwak1Page(page,inDto);
    }

    /**
     * 获取客户信息 经销商
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwak2Page(Page page,Dto inDto) {
        return gwat300Mapper.getGwak2Page(page,inDto);
    }

    /**
     * 根据区域范围获取经销商
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwak(Dto inDto) {
        return gwat300Mapper.getGwak(inDto);
    }

    /**
     * 删除购物车商品--单笔
     *
     * @param inDto
     * @return
     */
    @Transactional
    public void delete(Dto inDto) {
        QueryWrapper<GwcqT> wrapper = new QueryWrapper<>();
        wrapper.eq("GWCQENT",inDto.getString("GWCQENT"));
        wrapper.eq("GWCQDOCNO",inDto.getString("GWCQDOCNO"));
        wrapper.eq("GWCQSEQ",inDto.getBigDecimal("GWCQSEQ"));

        new GwcqT().delete(wrapper);
    }

    /**
     * 获取当前商品的在制数量
     *
     * @param inDto
     * @return
     */
    public Dto getGwcxData(Dto inDto) {
        return gwat300Mapper.getGwcx(inDto);
    }

    /**
     * 获取客户所在区域的业务人员,线人
     *
     * @param inDto
     * @return
     */
//    public List<Dto> getGwaaData(Dto inDto) {
//        inDto.put("GWAAENT", "80");
//        return gwat300Mapper.getGwaaData(inDto);
//    }

    /**
     * 获取转单潜在商机列表
     *
     * @param inDto
     * @return
     * @author wenchuan.li on 2018/07/19 16:00
     * @update wenchuan.li on 2018/09/26 09:30
     * 添加gwbkseq2，gwbkseq2：拜访提报商品的项次，每次提报商品都是新增一份项次+1
     */
    public List<Dto> getQzsjList(Dto inDto) {
        List<Dto> p = gwat300Mapper.getQzsjPage(inDto);
        for (Dto o : p) {
            inDto.put("GWBKSEQ2", o.getString("GWBKSEQ2"));
            inDto.put("GWBKNAME", o.getString("GWBKNAME"));
            o.put("details", gwat300Mapper.getQzsjList(inDto));
        }
        return p;
    }


    /**
     * 根据商机主题+客户获取 拜访记录提报中的 经销商数据
     *
     * @param inDto
     * @return
     * @author wenchuan.li on 2018/07/20 12:34
     */
    public List<Dto> getJxsByGwbh016(Dto inDto) {
        return gwat300Mapper.getJxsByGwbh016(inDto);
    }

    /**
     * 购物车--新增--转单
     *
     * @author wenchuan.li on 2018/07/20 09:53
     */
    @Transactional
    public void saveZdData(List<GwcqT> gwcq_tPOs, List<GwbkT> gwbk_tPOs, GwbhT gwbh_tPO, Dto gwbk_tPOx) {
        for (GwcqT gwcq_tPO : gwcq_tPOs) {
            gwcq_tPO.insert();
        }

        // 转单--修改订单状态
        for (GwbkT gwbk_tPO : gwbk_tPOs) {
            gwbk_tPO.insert();
        }

        gwbh_tPO.insert();
    }

    /**
     * 取消已经生成的订单时 进行删除
     *
     * @return
     * @author wenchuan.li on 2018/07/20 16:04
     */
    @Transactional
    public void cancelZd(Dto inDto, Dto gwbhDto) {
//        gwat300Mapper.cancelZd(gwbhDto);
        QueryWrapper<GwbkT> wrapper = new QueryWrapper<>();
        wrapper.eq("GWBKENT",gwbhDto.getString("GWBHENT"));
        wrapper.eq("GWBKNAME",gwbhDto.getString("GWBHNAME"));
        wrapper.eq("GWBKID",gwbhDto.getString("GWBHID"));
        wrapper.eq("GWBKSEQ2",gwbhDto.getString("GWBHSEQ"));
        new GwbkT().delete(wrapper);

        QueryWrapper<GwbhT> wrapper1 = new QueryWrapper<>();
        wrapper1.eq("GWBHENT",gwbhDto.getString("GWBHENT"));
        wrapper1.eq("GWBHNAME",gwbhDto.getString("GWBHNAME"));
        wrapper1.eq("GWBHSEQ",gwbhDto.getString("GWBHSEQ"));
        wrapper1.eq("GWBHACTI","S");
        new GwbhT().delete(wrapper1);

        QueryWrapper<GwcqT> wrapper2 = new QueryWrapper<>();
        wrapper2.eq("GWCQENT",gwbhDto.getString("GWBHENT"));
        wrapper2.eq("GWCQ030",gwbhDto.getString("GWBHNAME"));
        new GwcqT().delete(wrapper2);
    }

    /**
     * 获取经销商信息
     *
     * @param inDto
     * @return
     */
    public List<Dto> getJxsPage(Page page,Dto inDto) {
        return gwat300Mapper.getJxsPage(page,inDto);
    }

    /**
     * 获取客户、经销商地址信息
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwalList(Dto inDto) {
        return gwat300Mapper.getGwalList(inDto);
    }

    /**
     * 判断已转订单的潜在商机 是否已经转了正式订单
     *
     * @param inDto
     * @return
     */
    public Dto getGwcqByZ(Dto inDto) {
        return gwat300Mapper.getGwcqByZ(inDto);
    }

    public Dto getGwbg(Dto inDto) {
        return gwat300Mapper.getGwbg(inDto);
    }

}
